package main

import (
	"flag"
	"log"
)

//flag标准库可以非常方便地解析和处理命令行参数

func main() {
	/*
			var name string
			flag.StringVar(&name, "name", "Go语言编程之旅", "帮助信息")
			flag.StringVar(&name, "n", "Go语言编程之旅", "帮助信息")

		flag.Parse()
		log.Printf("name: %s", name)
	*/

	var name string

	//子命令的使用
	goCmd := flag.NewFlagSet("go", flag.ExitOnError)
	goCmd.StringVar(&name, "name", "Go语言", "帮助信息")
	phpCmd := flag.NewFlagSet("php", flag.ExitOnError)
	phpCmd.StringVar(&name, "n", "php语言", "帮助信息")
	flag.Parse()
	args := flag.Args()
	if len(args) <= 0 {
		return
	}

	switch args[0] {
	case "go":
		_ = goCmd.Parse(args[1:])
	case "php":
		_ = phpCmd.Parse(args[1:])
	}
	log.Printf("name:%s", name)
}

/*
	命令行参数支持如下三种标志语法
	-flag: 仅支持布尔类型
	-flag x: 仅支持非布尔类型
	-flag=x: 都支持
*/
